package com.jinxinol.basic.system.service.impl;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.jinxinol.basic.system.domain.SysSeqsNo;
import com.jinxinol.basic.system.mapper.SysSeqsNoMapper;
import com.jinxinol.basic.system.service.ISysSeqsNoService;
import com.jinxinol.core.common.AbstractService;

@Service
public class SysSeqsNoService extends AbstractService<SysSeqsNo> implements
		ISysSeqsNoService {
	@Autowired
	protected void setMapper(SysSeqsNoMapper mapper) {
		this.mapper = mapper;
	}
	/**
	* @Title: selectCountByType 
	* @Description: 查询是否已经存在
	* @author LXD
	* @email 247428412@qq.com
	 */
	public Integer selectCountByType(SysSeqsNo sysSeqsNo) throws Exception{
		sysSeqsNo.setOrder_type(sysSeqsNo.getOrder_type().trim().toUpperCase());//pjk ->PJK
//		if (sysSeqsNo.getSec_code_flag().equals("N")) {
//			sysSeqsNo.setSec_code("N");
//		}
//		if (sysSeqsNo.getYear_month_flag().equals("N")) {
//			sysSeqsNo.setYear_month("0");
//		} else {
//			Date d = new Date();
//			SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM");
//			String s = sdf.format(d);
//			sysSeqsNo.setYear_month(s);
//		}
		return ((SysSeqsNoMapper) mapper).selectCountByType(sysSeqsNo);
	}
	/** 插入一条新的SYS_SEQS_NO 记录 */
	public void insertS(SysSeqsNo sysSeqsNo) throws Exception {
		Integer index = ((SysSeqsNoMapper) mapper).findNextSEQ();
		sysSeqsNo.setOrder_type_no(sysSeqsNo.getOrder_type().trim().toUpperCase()+index);// PO+11  -> "PO11"
		sysSeqsNo.setOrder_type(sysSeqsNo.getOrder_type().trim().toUpperCase());//pjk ->PJK
		if (sysSeqsNo.getSec_code_flag().equals("N")) {
			sysSeqsNo.setSec_code("N");
		}
		if (sysSeqsNo.getYear_month_flag().equals("N")) {
			sysSeqsNo.setYear_month("0");
		} else {
			Date d = new Date();
			SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM");
			String s = sdf.format(d);
			sysSeqsNo.setYear_month(s);
		}
		((SysSeqsNoMapper) mapper).insertS(sysSeqsNo);
	}
	
	/** 通过查询虚表获得下一个序列号 */
	public Integer findNextSEQ() throws Exception{
		return ((SysSeqsNoMapper) mapper).findNextSEQ();
	}
	
	/** 查找所有的SYS_SEQS_NO 记录 */
	public List<SysSeqsNo> findAllSSN() throws Exception {
		List<SysSeqsNo> ssn = new ArrayList<SysSeqsNo>();
		ssn = ((SysSeqsNoMapper) mapper).findAllSSN();
		return ssn;
	}
	
	/**  查找所有的SYS_SEQS_NO 记录 但不包括本条记录 */
	public List<SysSeqsNo> findAllSSNExcptThis(String order_type_no)throws Exception{
		List<SysSeqsNo> ssn = new ArrayList<SysSeqsNo>();
		ssn = ((SysSeqsNoMapper) mapper).findAllSSNExcptThis(order_type_no);
		return ssn;
	}
	
	/** 按用户搜索条件查询符合条件的 SYS_SEQS_NO 记录  */
	public List<SysSeqsNo> findBySomeReq(SysSeqsNo sysSeqsNo) throws Exception{
		List<SysSeqsNo> ssn = new ArrayList<SysSeqsNo>();
		ssn = ((SysSeqsNoMapper) mapper).findBySomeReq(sysSeqsNo);
		return ssn;
	}
	
	/** 删除一条SYS_SEQS_NO 记录 */
	public void deleteS(String id) throws Exception{
		((SysSeqsNoMapper) mapper).deleteS(id);
	}

	/** 修改一条SYS_SEQS_NO 记录 */
	public void updateS(SysSeqsNo sysSeqsNo) throws Exception {
		String order_type  = sysSeqsNo.getOrder_type().trim().toUpperCase();// tk ->TK
		sysSeqsNo.setOrder_type(order_type);//pjk ->PJK
		if (sysSeqsNo.getSec_code_flag().equals("N")) {
			sysSeqsNo.setSec_code("N");
		}
		if (sysSeqsNo.getYear_month_flag().equals("N")) {
			sysSeqsNo.setYear_month("0");
		} else {
			Date d = new Date();
			SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM");
			String s = sdf.format(d);
			sysSeqsNo.setYear_month(s);
		}
		((SysSeqsNoMapper) mapper).updateS(sysSeqsNo);
	}
	
	/** 通过id 找到对应的一条 SYS_SEQS_NO 记录 */
	public SysSeqsNo findByIdS(String id) throws Exception{
		SysSeqsNo ssn = new SysSeqsNo();
		ssn =((SysSeqsNoMapper) mapper).findByIdS(id);
		return ssn;
	}
	
	/** 这是一个公共API方法 供其他地方使用该方法得到单据对象 */
	public SysSeqsNo findThisSysSeqsNo(String order_type_no) throws Exception{
		SysSeqsNo sn = null;
		sn = ((SysSeqsNoMapper) mapper).findThisSysSeqsNo(order_type_no.toUpperCase());
		if(sn!=null){
			((SysSeqsNoMapper) mapper).getBianHaoByType(sn);
		}else{
			sn = new SysSeqsNo();
			sn.setMsg_code(-1);//异常的时候设置返回-1
			sn.setMsg_info("标识符错误！");
			sn.setBill_no("");
		}
		return sn;
	}

	/* 按标志码获取单据编码
	 * @see com.jinxinol.basic.menu.service.ISysSeqsNoService#getBianMa(java.lang.String)
	 */
	public String getBianMa(String order_type_no) throws Exception {
		SysSeqsNo sn = ((SysSeqsNoMapper) mapper).findThisSysSeqsNo(order_type_no);
		if(sn!=null){
			((SysSeqsNoMapper) mapper).getBianHaoByType(sn);
		}else{
			throw new Exception("没有查找到相应的唯一标志码，请检查："+order_type_no+" 是否在编码规则中存在。");
		}
		if(sn.getMsg_code()!=0){
			throw new Exception("创建单据编码时出错，错误信息："+sn.getMsg_info()+" 错误代码："+sn.getMsg_code());
		}else{
			return sn.getBill_no();
		}
	}
	
}
